#ifndef MYOBJECTWITHMANYPARAMETERS_H
#define MYOBJECTWITHMANYPARAMETERS_H

///////////////////////////////////////////////////////////////////////////////
//
// MyObjectWithManyParameters.h
//
///////////////////////////////////////////////////////////////////////////////
//
// Author:            Jan Maes
// Created:           Sunday, June 15, 2008
// Responsibilities:  Objects of class MyObjectWithManyParameters can only be
//                    created using the HandleFactory::HandleFactory::Create
//                    member functions. As a result we get a
//                    HandleFactory::Handle object as output. This class has
//                    a non default constructor to test the construction of
//                    objects via the HandleFactory using this non default
//                    constructor with many parameters.
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// Includes
///////////////////////////////////////////////////////////////////////////////

#include <HandleFactory/HandleFactory.h>

#include <memory>
#include <string>

///////////////////////////////////////////////////////////////////////////////
// SomeEmptyClass
///////////////////////////////////////////////////////////////////////////////

struct SomeEmptyClass
  {
  SomeEmptyClass(){}

  };

///////////////////////////////////////////////////////////////////////////////
// MyObjectWithManyParameters
///////////////////////////////////////////////////////////////////////////////

class MyObjectWithManyParameters : public HandleFactory::HandleFactory<MyObjectWithManyParameters>
  {
  private:
    friend class HandleFactory::HandleFactory<MyObjectWithManyParameters>;

    MyObjectWithManyParameters() : m_double(0.0), m_int(0), m_string()
      {
      }

    explicit MyObjectWithManyParameters(double i_double,
                                          SomeEmptyClass i_some_empty_class,
                                          int i_int,
                                          std::string i_string) : 
    m_double(i_double), m_some_empty_class(i_some_empty_class),
    m_int(i_int), m_string(i_string)
      {
      }    
  
    ~MyObjectWithManyParameters()
      {
      }

  public:

    double m_double;
    SomeEmptyClass m_some_empty_class;
    int m_int;
    std::string m_string;

  };

#endif